فرض کن مدیر یه ساختمان هستی و کلید همه درها رو داری. اما نمیخوای همه کارمندان کلید اصلی رو داشته باشن. به جاش، به هر کدوم یه **کارت دسترسی** میدی که فقط به درهای خاصی اجازه ورود بده. توی لینوکس، su مثل کلید اصلی (رفتن به کاربر root) و sudo مثل کارت دسترسی (اجرای دستورات خاص با مجوز root) است. این جلسه بهت یاد میده چطور این ابزارها رو مدیریت کنی.
در لینوکس، برای انجام کارهای مدیریتی (نصب نرمافزار، تغییر تنظیمات سیستم، مدیریت کاربران و ...) به دسترسی root نیاز دارید. اما استفاده مستقیم از کاربر root خطرناک است و میتواند به سیستم آسیب بزند. به همین دلیل، دو ابزار اصلی برای مدیریت دسترسی root وجود دارد:
su (Switch User) → تغییر به کاربر دیگر (معمولاً root)sudo (Superuser Do) → اجرای یک دستور خاص با دسترسی root
هرگز با کاربر root بهطور مستقیم کار نکنید. همیشه از یک کاربر معمولی استفاده کنید و فقط در صورت نیاز از sudo استفاده کنید.
su (Switch User)
su به شما اجازه میدهد به کاربر دیگری (معمولاً root) تغییر هویت دهید. با اجرای su بدون آرگومان، به کاربر root تغییر میکنید و باید رمز root را وارد کنید.
توضیح: با su به کاربر root تغییر هویت میدهید. پرامپت به # تغییر میکند که نشاندهنده دسترسی root است.
توضیح: su - علاوه بر تغییر کاربر، محیط کاربر (متغیرهای محیطی، مسیرها و ...) را نیز به root تغییر میدهد.
su و su -:
su → فقط کاربر را تغییر میدهد (محیط کاربری قبلی باقی میماند).su - → کاربر و محیط کاربری (HOME, PATH, ...) را تغییر میدهد.
توضیح: به کاربر ali تغییر هویت میدهد (با رمز عبور ali).
susu باید رمز root را بدانید (که امنیت را کاهش میدهد).su: نیاز به دانستن رمز root، عدم وجود لاگ دقیق، اجرای همه دستورات با دسترسی root.
sudo (Superuser Do)
sudo به کاربران مجاز اجازه میدهد تا یک دستور خاص را با دسترسی root (یا کاربر دیگر) اجرا کنند، بدون اینکه نیاز به دانستن رمز root داشته باشند. کاربر باید رمز خودش را وارد کند.
توضیح: با sudo میتوانید apt update را با دسترسی root اجرا کنید.
sudo:
sudo ذخیره میشود./etc/sudoers
فایل /etc/sudoers مشخص میکند که کدام کاربران میتوانند از sudo استفاده کنند و چه دستوراتی را میتوانند اجرا کنند. این فایل را هرگز مستقیم ویرایش نکنید. برای ویرایش از دستور visudo استفاده کنید.
توضیح: visudo فایل /etc/sudoers را با یک ویرایشگر امن باز میکند و قبل از ذخیره، خطاهای نحوی را بررسی میکند.
هرگز /etc/sudoers را با ویرایشگر معمولی (مثل nano) ویرایش نکنید. اگر خطایی در فایل وجود داشته باشد، ممکن است دسترسی sudo را برای همیشه از دست بدهید! همیشه از visudo استفاده کنید.
sudoers
خطوط اصلی در فایل sudoers به این شکل هستند:
کاربر/گروه میزبان=(کاربر:گروه) دستورات
sudoers| خط در sudoers | توضیح |
|---|---|
ali ALL=(ALL:ALL) ALL |
کاربر ali میتواند همه دستورات را با sudo اجرا کند. |
%admin ALL=(ALL:ALL) ALL |
همه کاربران گروه admin میتوانند همه دستورات را با sudo اجرا کنند. |
ali ALL=(ALL:ALL) /usr/bin/apt, /usr/bin/systemctl |
کاربر ali فقط میتواند apt و systemctl را با sudo اجرا کند. |
ali ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt |
کاربر ali میتواند apt را با sudo بدون نیاز به رمز عبور اجرا کند. |
NOPASSWD میتوانید به کاربران اجازه دهید بدون وارد کردن رمز عبور، از sudo استفاده کنند. این کار برای اسکریپتهای خودکار مفید است اما امنیت را کاهش میدهد.
توضیح: sudo -l لیست دستوراتی که کاربر فعلی میتواند با sudo اجرا کند را نمایش میدهد.
توضیح: sudo -u ali دستور را به عنوان کاربر ali اجرا میکند (نه root).
su و sudosusudo/var/log/auth.log لاگ میشوند.su نیاز به رمز root دارد و همه دستورات را با دسترسی root اجرا میکند، اما sudo نیاز به رمز خود کاربر دارد و فقط دستورات مشخص را با دسترسی root اجرا میکند.
sudo به جای su استفاده کنید.visudo محدود کنید./var/log/auth.log را مرتب بررسی کنید.NOPASSWD با احتیاط استفاده کنید.su: تغییر به کاربر دیگر (معمولاً root) با رمز root.su -: تغییر کاربر و محیط کاربری.sudo: اجرای دستور با دسترسی root با رمز خود کاربر./etc/sudoers: فایل پیکربندی sudo (با visudo ویرایش کنید).sudo -l: نمایش دستورات قابل اجرا با sudo.sudo -u user: اجرای دستور به عنوان کاربر دیگر./var/log/auth.log